package com.knowledgegraph.neo4j.service;

import com.knowledgegraph.neo4j.entity.GraphRelation;

import java.util.List;
import java.util.Map;

/**
 * Neo4j 关系服务接口
 */
public interface Neo4jRelationService {
    
    /**
     * 创建关系
     */
    GraphRelation createRelation(Long sourceId, Long targetId, String type, String description, 
                                Double strength, Double confidence, Long graphId, String creator);
    
    /**
     * 更新关系
     */
    GraphRelation updateRelation(Long relationId, String type, String description, 
                                Double strength, Double confidence);
    
    /**
     * 删除关系
     */
    void deleteRelation(Long relationId);
    
    /**
     * 根据知识图谱ID查询关系
     */
    List<Map<String, Object>> findByGraphId(Long graphId);
    
    /**
     * 根据关系类型查询
     */
    List<Map<String, Object>> findByType(String type);
    
    /**
     * 查询两个实体之间的关系
     */
    List<GraphRelation> findRelationsBetween(Long sourceId, Long targetId);
    
    /**
     * 获取关系统计信息
     */
    Map<String, Object> getRelationStatistics(Long graphId);
    
    /**
     * 获取关系类型分布
     */
    List<Map<String, Object>> getRelationTypeDistribution(Long graphId);
    
    /**
     * 查询实体的所有关系
     */
    List<Map<String, Object>> getEntityRelations(Long entityId);
    
    /**
     * 查询强关系
     */
    List<Map<String, Object>> getStrongRelations(Long graphId, Double threshold);
    
    /**
     * 批量创建关系
     */
    List<GraphRelation> batchCreateRelations(List<Map<String, Object>> relationData);
    
    /**
     * 查询知识图谱结构
     */
    Map<String, Object> getGraphStructure(Long graphId);
    
    /**
     * 查询最短路径
     */
    List<Map<String, Object>> findShortestPath(Long startId, Long endId);
}